Skip to content

Build and test conda-recipe-cf for Intel Python CI - #265

Open
jharlow-intel wants to merge 1 commit into
masterfrom
ci/intel-python-ci
Open

jharlow-intel wants to merge 1 commit into
masterfrom
ci/intel-python-ci

Conversation

@jharlow-intel

@jharlow-intel jharlow-intel commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Adds what Intel Python CI (gh-ci) needs from mkl-service, as IntelPython/mkl_fft#400, IntelPython/mkl_random#204 and IntelPython/mkl_umath#294 do for theirs: a ci/ directory and a new workflow, .github/workflows/intel-ci.yml. The workflow builds conda-recipe-cf for every platform and Python version the recipe declares, and tests each package in a clean conda-forge environment with ci/test.py. Intel's Jenkins then waits for that run, tests each package again on its own machines, scans it, and for a release tag publishes the packages it tested. Jenkins isn't switched on for mkl-service yet, so until it is, this only adds a GitHub Actions workflow.

  • ci/matrix.py, ci/build.py, ci/hooks.py: the shared gh-ci scripts, standard library only, byte-identical to the other three repositories.
  • ci/test.py: runs pytest --pyargs mkl against the installed package and writes a JUnit report.
  • ci/config.yml: the workflow, the artifact names (mkl-service {platform} Python {python}, as conda-build-test.yml names them) and the test requirement, pytest.
  • conda-recipe-cf/conda_build_config.yaml: now lists the Python versions of conda-forge/mkl-service-feedstock plus 3.15t, that is 3.11 to 3.15 plus 3.14t and 3.15t, for ci/matrix.py. conda-build-test.yml passes --python itself, so it is unaffected. mkl-service doesn't depend on NumPy, so there is no NumPy variant.
  • ci/README.md, and pointers in AGENTS.md and .github/AGENTS.md.

A pull request builds the oldest and the newest regular Python versions on Linux and Windows; pushes to master and tags build all 14.

Overlap with #264. It adds the same python: entries to conda-recipe-cf/conda_build_config.yaml, at the same place; only the comment above them differs, so whichever lands second keeps one.

Verification

  • python ci/matrix.py lists 14 builds, Linux and Windows for 3.11 to 3.15, 3.14t and 3.15t; with --event pull_request it lists 3.11 and 3.15 on both.
  • ci/config.yml passes gh-ci's own plan check.
  • Lint: pre-commit run on every changed file, all hooks passing, and zizmor on intel-ci.yml, no findings.
  • Tests: this pull request's Intel Python CI run built Linux and Windows for Python 3.11 and 3.15, the oldest and the newest, and ran ci/test.py against each package: 188 passed and 22 skipped on 3.11, 190 passed and 20 skipped on 3.15, on both platforms.

Not verified

  • The builds a tag or a push to master adds, Python 3.12 to 3.14, 3.14t and 3.15t; they use the same jobs.
  • The Jenkins side, which isn't enabled for mkl-service yet.

@jharlow-intel jharlow-intel self-assigned this Oct 28, 2026
Copilot AI balanced review requested due to automatic review settings October 28, 2026 21:28

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The native-package pipeline requires end-to-end Linux/Windows CI validation of conda solving and runtime loading for 3.14t/3.15t, which remain unverified by standard-library-only checks.

No open issues 🎉

What changed in this PR

Adds GitHub Actions build and package testing for Intel Python CI, preparing mkl-service for Jenkins integration. Jenkins is not yet enabled for this repository.

Changes:

  • Derives Linux and Windows build matrices from the conda-forge recipe, selecting four builds for pull requests and all 16 for master pushes and tags.
  • Adds build and isolated package-test scripts, with pytest results written as JUnit reports.
  • Documents the integration and its configuration.
File Description
conda-recipe-cf/​conda_build_config.yaml Declares Python versions and ABI variants for matrix generation.
ci/​test.py Checks the interpreter and runs installed-package tests with JUnit output.
ci/​README.md Documents CI operation and local commands.
ci/​matrix.py Generates platform and Python matrices from build declarations.
ci/​hooks.py Installs artifacts into clean environments and runs package tests.
ci/​config.yml Defines the workflow, artifact naming, and test requirements.
ci/​build.py Builds packages for a selected Python variant and collects artifacts.
AGENTS.md Adds a pointer to Intel Python CI documentation.
.github/​workflows/​intel-ci.yml Orchestrates matrix generation, builds, artifact uploads, and tests.
.github/​AGENTS.md Documents the workflow and its recipe-derived matrix exception.

Review effort: Balanced

Comment thread conda-recipe-cf/conda_build_config.yaml Outdated
@@ -1,3 +1,13 @@
# Python versions for ci/matrix.py, one per line, without selectors
python:
- "3.10"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

conda-forge dropped 3.10 python, and so it's a bit confusing to have 3.10 listed here

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was planning to rely on similar matrix building in #264 where I tried to improve cf testing workflow.
But we should not have 3.10 here then.

@jharlow-intel
jharlow-intel force-pushed the ci/intel-python-ci branch 2 times, most recently from ee0bbbf to eaaedc1 Compare October 30, 2026 14:43
@jharlow-intel jharlow-intel reopened this Oct 30, 2026
@jharlow-intel
jharlow-intel force-pushed the ci/intel-python-ci branch 4 times, most recently from 0db81d3 to f4c2344 Compare October 30, 2026 15:27
Adds what Intel Python CI (gh-ci) needs: a ci/ directory and
.github/workflows/intel-ci.yml. The workflow builds conda-recipe-cf with
conda-build and the wheels with cibuildwheel, for every platform and Python
version the recipe and pyproject.toml declare, and tests each package in a
clean environment with ci/test.py. Intel's Jenkins tests them again, scans
them, and publishes a release tag's tested packages as its GitHub Release.

conda-recipe-cf/ is now the only recipe: conda-recipe/ and conda-package.yml,
which built it against Intel's channel and copied wheels out through
WHEELS_OUTPUT_FOLDER, are removed. conda-package-cf.yml reports the same check
names, so the required checks still run.

The wheels' run-time requirement on mkl comes from [tool.gh-ci] wheel-requires
in pyproject.toml, which ci/build.py adds to each wheel: in [project] it would
fail the recipe's pip check, as conda-forge's mkl has no pip metadata.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants